function setAuthenticationToken () {
    let authenticationToken = localStorage.getItem("Authentication");
    if (authenticationToken != null && authenticationToken !== '' && typeof authenticationToken != 'undefined') {
        //设置AJAX的全局默认选项
        layui.$.ajaxSetup({
            headers: { // 默认添加请求头
                "Authentication": authenticationToken
            }
        });
    }
}
let updateUrl = '';
let table = layui.table, layDate = layui.laydate, layer = layui.layer, $ = layui.$, form = layui.form, tree = layui.tree;
window.onload = function () {
    setAuthenticationToken();
    window.parent.document.getElementsByTagName('title')[0].innerText = document.getElementsByTagName('title')[0].innerText;

    let cols = [];
    cols.push({type: 'checkbox', fixed: 'left'});
    <#list table.fields as field><#--生成公共字段 -->
    cols.push(
        {field:'${field.propertyName}', title:'${field.comment}', templet: function(res){
                return res.${field.name} ? res.${field.name} : '-';
        }}
    );
    <#if field.propertyType == 'LocalDateTime'>
    // 初始化时间框
    layDate.render({
        elem: '#${field.propertyName}'
        ,type: 'date'
        ,format: 'yyyy-MM-dd'
    });
    </#if>
    </#list>
    cols.push({fixed: 'right', width: 200, title:'操作', toolbar: '#generatorTableBar'});
    // 初始化数据表格
    table.render({
        elem: '#generatorTable'
        ,url:'/auth/${table.entityPath}/getAll${table.entityName}s'
        ,toolbar: '#generatorTableToolbar' //开启头部工具栏，并为其绑定左侧模板
        ,defaultToolbar: ['filter', 'exports', 'print', { //自定义头部工具栏右侧图标。如无需自定义，去除该参数即可
            title: '提示'
            ,layEvent: 'LAYTABLE_TIPS'
            ,icon: 'layui-icon-tips'
        }]
        ,title: '表信息'
        ,cols: [cols]
        ,page: true
        ,text: {
            none: '没有相关数据' //默认：无数据。注：该属性为 layui 2.2.5 开始新增
        }
        ,parseData: function(res){ //res 即为原始返回的数据
            return {
                'msg': res.message, //解析提示文本
                "count": res.data.total, //解析数据长度
                "data": res.data.data, //解析数据列表
                "code": res.code //解析数据列表
            };
        }
        ,request: {
            pageName: 'currentPage' //页码的参数名称，默认：page
        }
        ,response: {
            statusCode: 200 //规定成功的状态码，默认：0
        }
    });
    //头工具栏事件
    table.on('toolbar(generatorTable)', function(obj){
        let checkStatus = table.checkStatus(obj.config.id);
        let data = null;
        switch(obj.event){
            case 'reload':
                reload();
            break;
            case 'search':
                searchTable();
            break;
            case 'insert':
                insert();
            break;
            //自定义头工具栏右侧图标 - 提示
            case 'LAYTABLE_TIPS':
                layer.alert('这是工具栏右侧自定义的一个图标按钮');
            break;
        }
    });

    //监听行工具事件
    table.on('tool(generatorTable)', function(obj){
        let data = obj.data;
        if(obj.event === 'update'){
            update(data);
        } else if(obj.event === 'delete'){
            deleteData(data);
        }
    });

    //监听提交
    layui.form.on('submit(formSubmit)', function(data){
        data.field.userBirthDay = data.field.userBirthDay + ' 00:00:00';
        let type = updateUrl.indexOf('insert') >= 0 ? 'POST' : 'PUT';
        layer.load(2);
        $.ajax({
            url: updateUrl,
            type,
            dataType: 'json',
            data: JSON.stringify(data.field),
            contentType: 'application/json; charset=utf-8',
            success:function (result) {
                if (result != null && result.code === 200) {
                    //关闭所有页面层
                    layer.closeAll('page');
                    reload();
                    // 重置表单
                    layui.$('.updateData')[0].reset();
                }
                layer.msg(result.message, function(){});
            },
            error: function () {
                layer.msg('网络连接失败！', function(){});
            },
            complete: function () {
                layer.closeAll('loading');
            }
        });
        return false;
    });
};

$(document).on('click', '#cancelSubmit', function () {
    // 关闭页面层
    layer.closeAll('page');
});

/**
* 删除对应的记录
*/
function deleteData(data) {
    layer.load(2);
    $.ajax({
<#list table.fields as field><#--生成公共字段 -->
    <#if field.keyIdentityFlag>
        url: '/auth/${table.entityPath}/deleteData/' + data.${field.propertyName},
    </#if>
</#list>
        type: 'DELETE',
        dataType: 'JSON',
        success:function (result) {
            if (result != null && result.code === 200) {
                //关闭所有页面层
                layer.closeAll('page');
                reload();
            }
            layer.msg(result.message, function(){});
        },
        error: function () {
            layer.msg('网络连接失败！', function(){});
        },
        complete: function () {
            layer.closeAll('loading');
        }
    });
}

/**
* 查找表格
*/
function searchTable() {
    let searchText = layui.$('.tableName').val();
    table.reload('generatorTable', {
        where: {
            tableName: searchText
        } //设定异步数据接口的额外参数
    });
    layui.$('.tableName').val(searchText);
}

/**
* 添加一条数据
*/
function insert() {
    // 改变url
    updateUrl = '/auth/${table.entityPath}/insertData';
    showUpdateModal('添加信息');
}

/**
* 修改信息
* @param obj 当前行数据
*/
function update(data) {
    // 改变url
    updateUrl = '/${table.entityPath}/updateData';
    // 给表单赋值
    form.val('updateData', data);
    showUpdateModal('修改信息');
}

/**
* 显示修改模态框
*/
function showUpdateModal(title) {
    let updateData = $('.updateData');
    updateData.show();
    // 显示模态框
    layer.open({
        type: 1,
        title,
        area: ['100%', '100%'],
        content: updateData,
        cancel: function () {
            updateData.hide();
            updateData[0].reset();
        },
        end: function () {
            updateData.hide();
            updateData[0].reset();
        }
    });
}

function reload() {
    table.reload('generatorTable', {});
}

/**
* 将扁平化、有父子关系的数据转为树形结构
* @param source 元数据
* @param id 当前ID
* @param parentId 父节点ID
* @param children 子节点名
* @returns 树形结构数据
*/
function treeData(source, id, parentId, children){
    let cloneData = JSON.parse(JSON.stringify(source));
    return cloneData.filter(father=>{
    let branchArr = cloneData.filter(child => father[id] === child[parentId]);
    branchArr.length>0 ? father[children] = branchArr : '';
        return father[parentId] === 0        // 如果顶层不是parentId=0，请自行修改
    })
}